﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace Clinica_Frba.Generar_Receta
{

    public partial class FormBusquedaAfiliadoReceta : Form
    {
        protected FormBusquedaAfiliadoRecetaParent parentForm;
        
        public FormBusquedaAfiliadoReceta(FormBusquedaAfiliadoRecetaParent parent)
        {
            InitializeComponent();
            this.parentForm = parent;
        }

        private void lLimpiarFiltros_Click(object sender, EventArgs e)
        {
            tbNombre.Clear();
            tbApellido.Clear();
            tbNroDeAfiliado.Clear();
            tbNroDeDocumento.Clear();
            dgvResultadoDeBusqueda.Rows.Clear();
            parentForm.afiliadoSeleccionado(null);
        }

        protected void dgvResultadoDeBusqueda_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == dgvResultadoDeBusqueda.Columns["Seleccionar"].Index)
            {

                if (e.RowIndex >= 0)
                {

                    InfoDeAfiliado info = new InfoDeAfiliado();
                    SqlConnection myConnection = new SqlConnection(publico.ConnectionString);
                    myConnection.Open();
                    SqlCommand consulta = new SqlCommand("SELECT * FROM AFILIADO af JOIN PLAN_MEDICO pm ON pm.ID_PLAN = af.ID_PLAN WHERE ID_AFIL = '" + dgvResultadoDeBusqueda.Rows[e.RowIndex].Cells["NroAfiliado"].Value.ToString() + "'", myConnection);
                    SqlDataReader executeCMD = consulta.ExecuteReader();
                    executeCMD.Read();

                    info.strAfiliadoID = executeCMD["ID_AFIL"].ToString();
                    info.strCantidadDeFamiliaresDependientes = executeCMD["RELATIVOS_A_CARGO"].ToString();
                    info.strNombre = executeCMD["Nombre"].ToString();
                    info.strApellido = executeCMD["Apellido"].ToString();
                    info.strEmail = executeCMD["mail"].ToString();
                    info.strEstadoCivil = executeCMD["ESTADO_CIVIL"].ToString();
                    info.strDireccion = executeCMD["Direccion"].ToString();
                    info.strPlanMedico = executeCMD["descripcion"].ToString();
                    info.strSexo = executeCMD["Sexo"].ToString();
                    info.strTelefono = executeCMD["Telefono"].ToString();
                    info.strNumeroDeDocumento = executeCMD["NRO_DOC"].ToString();
                    info.strTipoDeDocumento = executeCMD["TIPO_DOC"].ToString();
                    info.strFechaDeNacimiento = executeCMD["FECHA_NACIMIENTO"].ToString();


                    executeCMD.Close();
                    consulta = new SqlCommand("SELECT ESTADO FROM AFILIADO WHERE ID_AFIL = '" + dgvResultadoDeBusqueda.Rows[e.RowIndex].Cells["NroAfiliado"].Value.ToString() + "'", myConnection);
                    executeCMD = consulta.ExecuteReader();
                    executeCMD.Read();

                    if (executeCMD["ESTADO"].ToString() == "I")
                    {
                        if (Dialogos.MostrarYesNoDialog("El usuario se encuentra actualmente inhabilitado, desea habilitarlo ?"))
                        {
                            executeCMD.Close();

                            SqlCommand strQuery = new SqlCommand("UPDATE AFILIADO SET ESTADO = 'H' WHERE ID_AFIL = '" + dgvResultadoDeBusqueda.Rows[e.RowIndex].Cells["NroAfiliado"].Value.ToString() + "'", myConnection);
                            int result = strQuery.ExecuteNonQuery();
                        }
                    }

                    if (!validarBonosFarmacia(info))
                    {
                        Dialogos.MostrarMessageDialog("El afiliado seleccionado no posee bonos de farmacia disponibles");
                        return;
                    }

                    parentForm.afiliadoSeleccionado(info);
                    this.Close();

                }

            }
        }

        private bool validarBonosFarmacia(InfoDeAfiliado info)
        {
            SqlConnection myConnection = new SqlConnection(publico.ConnectionString);
                    myConnection.Open();

                    SqlCommand consulta = new SqlCommand("select TOP 1 B.ID_BONO from BONO_FARMACIA B, BONO_COMPRA BC, COMPRA C WHERE B.ID_BONO = BC.ID_BONO_F AND BC.ID_COMPRA = C.ID_COMPRA AND B.USADO = 'N' AND C.ID_AFIL = " + info.strAfiliadoID, myConnection);

            SqlDataReader executeCMD = consulta.ExecuteReader();
            executeCMD.Read();

            bool result = executeCMD.HasRows;

            executeCMD.Close();

            return result;
        }

        private void lBuscar_Click(object sender, EventArgs e)
        {
            bool bHuboWhere = false;
            string strQuery = "SELECT nombre, apellido, nro_doc , id_afil FROM AFILIADO WHERE ";

            if ( tbNombre.Text.Length > 0)
            {
                strQuery += ("NOMBRE = '" + tbNombre.Text + "'");
                bHuboWhere = true;
            }

            if (tbApellido.Text.Length > 0)
            {
                if (bHuboWhere)
                    strQuery += " AND ";
                strQuery += ("APELLIDO = '" + tbApellido.Text + "'");
                bHuboWhere = true;
            }

            if (tbNroDeAfiliado.Text.Length > 0)
            {
                if (bHuboWhere)
                    strQuery += " AND ";
                strQuery += ("ID_AFIL = '" + tbNroDeAfiliado.Text + "'");
                bHuboWhere = true;
            }

            if (tbNroDeDocumento.Text.Length > 0)
            {
                if (bHuboWhere)
                    strQuery += " AND ";
                strQuery += ("NRO_DOC= '" + tbNroDeDocumento.Text + "'");
                bHuboWhere = true;
            }

            if (!bHuboWhere)
            {
                strQuery = "SELECT nombre, apellido, nro_doc , id_afil FROM AFILIADO ORDER BY nombre";
            }

            SqlConnection myConnection = new SqlConnection(publico.ConnectionString);
            myConnection.Open();
            SqlCommand consulta = new SqlCommand(strQuery, myConnection);
            SqlDataReader executeCMD = consulta.ExecuteReader();

            dgvResultadoDeBusqueda.Rows.Clear();
            while (executeCMD.Read())
            {
                dgvResultadoDeBusqueda.Rows.Add(executeCMD["nombre"], executeCMD["Apellido"], executeCMD["NRO_DOC"], executeCMD["ID_AFIL"]);
            }

            if(dgvResultadoDeBusqueda.Rows.Count == 0 )
            {
                Dialogos.MostrarMessageDialog("No se encontraron coincidencias...");
            }

        }
    }
}
